#include <iostream>
#include <vector>

using namespace std;

class testArray{
public:
	vector<int> printMarix(vector<vector<int>> marix);
};

vector<int> testArray::printMarix(vector<vector<int>> marix){
	vector<int> ret;
	int row = marix.size();
	int col = marix[0].size();

	int startRow = 0;
	int endRow = row - 1;
	int startCol = 0;
	int endCol = col - 1;

	while(2*startCol < col && 2*startRow < row){
		if (startRow = endRow && startCol == endCol)
		{
			ret.push_back(marix[startRow][startCol]);
		}
		else if (startRow == endRow && startCol != endCol)
		{
			for (int i = startCol; i < endCol; i++)
			{
				ret.push_back(marix[startRow][i]);
			}
		}
		else if (startCol == endCol && startRow != endRow)
		{
			for (int i = startRow; i < endRow; i++)
			{
				ret.push_back(marix[i][startCol]);
			}
		}
		else {
			//up
			for (int i = startCol; i < endCol; i++)
			{
				ret.push_back(marix[startRow][i]);
			}
			//right
			for (int i = startRow; i < endRow; i++)
			{
				ret.push_back(marix[i][endCol]);
			}
			//down
			for (int i = endCol; i > startCol; i--)
			{
				ret.push_back(marix[endRow][i]);
			}
			//left
			for (int i = endRow; i > startRow; i--)
			{
				ret.push_back(marix[i][startCol]);
			}
		}
		startRow++;
		endRow--;
		startCol++;
		endCol--;
	}
	return ret;
}


int main(){
	vector<vector<int>> marix(4, vector<int>(4));

	for (int row = 0; row < marix.size(); row++)
	{
		for (int col = 0; col < marix[row].size(); col++)
		{
			marix[row][col] = row * (marix[row].size()) + col + 1;
		}
	}

	testArray test;
	vector<int> outdata = test.printMarix(marix);
	for (int i = 0; i < outdata.size(); i++)
	{
		printf("outdata is %d \n ", outdata[i]);
	}

	system("pause");
	return 0;
}